package stack;

import java.util.Scanner;

/**
 * @author leiyuee
 * @ClassName Array2Stack 数组模拟栈
 * @date 2021/11/9 10:42
 */
public class Array2Stack {

    public static void main(String[] args) {
        ArrayStack stack = new ArrayStack(4);
        String key = "";
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);

        while (loop) {
            System.out.println("show:显示栈");
            System.out.println("exit:推出程序");
            System.out.println("push:添加数据(入栈)");
            System.out.println("pop:取数据(出栈)");
            System.out.println("请输入你的选择");
            key = scanner.next();
            switch (key) {
                case "show":
                    stack.list();
                    break;
                case "push":
                    System.out.println("请输入一个数字");
                    int value = scanner.nextInt();
                    break;
                case "pop":
                    try {
                        int res = stack.pop();
                        System.out.printf("出栈的数据是%d\n", res);
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                case "exit":
                    scanner.close();
                    loop = false;
                    break;
                default:
                    break;
            }
        }
        System.out.println("程序退出---");
    }
}
    class ArrayStack{
        private  int maxSize;
        private int[] stack;
        private int top = -1;


        //构造器
        public ArrayStack(int maxSize) {
            this.maxSize = maxSize;
            stack = new int[this.maxSize];
        }
        //满
        public boolean isFull(){
            return top == maxSize-1;
        }
        //空
        public boolean isEmpty(){
            return top == -1;
        }
        //入栈
        public void push(int value){
            if (isFull()){
                System.out.println("栈满");
                return;
            }
            top++;
            stack[top] = value;
        }
        //出栈

        public int pop(){
            if (isEmpty()){
                throw new RuntimeException("栈空，无数据");
            }
            int value =stack[top];
            top--;
            return value;
        }
        //遍历显示，从栈顶开始
        public void  list(){
            if (isEmpty()){
                System.out.println("栈空，无数据");
                return;
            }
            for (int i=0;i>=0;i--){
                System.out.printf("stack[%d]=%d\n",i,stack[i]);
            }
        }
    }

